package csm.sql;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * 
 * @author seungmun
 * @since 2006.1.18.
 * @version
 * @see
 */
public abstract class EntityBase
{
	private Connection conn = null;
	private boolean externalConnection;
	
	private DBConfig dbConfig = DBConfig.getDBConfig();
	

	public DBConfig getDBConfg(){
		if( dbConfig == null)
			dbConfig = DBConfig.getDBConfig(); // 상항 "default" 로 설정된 접속정보를 사용한다.
		return dbConfig;
	}
	/**
	 * 연결을 가져옵니다. (설정된 연결이 없는 경우에 새로운 연결을 얻어옵니다.)
	 * 
	 * @return
	 * @throws SQLException
	 */
	public Connection getConnection() throws SQLException
	{
		// 외부에서 바인딩된 커넥션이 있다면, 바인딩된 커넥션을 돌려준다.
		if (conn != null) return conn;
		
		// 외부에서 바인딩된 커넥션이 없다면, 풀에서 새로운 커넥션을 꺼내준
		Connection cn = getDBConfg().getConnection();
		return cn;
	}

	/**
	 * 컴포넌트 내부에서 이용하는 메서드이므로 Entity에서는 참조하지 않는다.<code>getConnection()</code>을 이용
	 * 
	 * @return
	 * @throws SQLException
	 */
	protected Connection getInternalConnection() throws SQLException
	{
		return conn;
	}

	/**
	 * 연결을 설정합니다.
	 * 
	 * @param cn
	 */
	public void setConnection(Connection cn)
	{
		if (cn == null) return;
		externalConnection = true;
		this.conn = cn;

	}

	protected boolean isExternalConnection()
	{
		return this.externalConnection;
	}
}